/*!
 * 文件名称： bsp_oled.c
 * 描    述： OLED驱动文件
 * 版本：     2023-12-03, V1.0
*/

/*
* GD32F303东方红开发板V1.0
* 淘宝商城：   https://juwo.taobao.com
* 技术交流：   https://www.gd32bbs.com/ask/
* 视频学习：   https://space.bilibili.com/475462605
* 微信公众号： gd32bbs
* Copyright    苏州聚沃电子科技有限公司
* 版权所有，盗版必究。
*/

#include "bsp_oled.h"
#include "driver_public.h"
#include "driver_gpio.h"
#include "driver_i2c.h"

/* OLED IIC模块及引脚注册 */
I2C_SCL_GPIO_DEF(OLED_I2C,B,10,NULL);
I2C_SDA_GPIO_DEF(OLED_I2C,B,11,NULL);
I2C_DEF(OLED_I2C,I2C1,1000000,0x60,MODE_POLL); 

/* 6*8 matrix */
const uint8_t C6X8[][6] = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,// sp
0x00, 0x00, 0x00, 0x2f, 0x00, 0x00,// !
0x00, 0x00, 0x07, 0x00, 0x07, 0x00,// "
0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14,// #
0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12,// $
0x00, 0x62, 0x64, 0x08, 0x13, 0x23,// %
0x00, 0x36, 0x49, 0x55, 0x22, 0x50,// &
0x00, 0x00, 0x05, 0x03, 0x00, 0x00,// '
0x00, 0x00, 0x1c, 0x22, 0x41, 0x00,// (
0x00, 0x00, 0x41, 0x22, 0x1c, 0x00,// )
0x00, 0x14, 0x08, 0x3E, 0x08, 0x14,// *
0x00, 0x08, 0x08, 0x3E, 0x08, 0x08,// +
0x00, 0x00, 0x00, 0xA0, 0x60, 0x00,// ,
0x00, 0x08, 0x08, 0x08, 0x08, 0x08,// -
0x00, 0x00, 0x60, 0x60, 0x00, 0x00,// .
0x00, 0x20, 0x10, 0x08, 0x04, 0x02,// /
0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E,// 0
0x00, 0x00, 0x42, 0x7F, 0x40, 0x00,// 1
0x00, 0x42, 0x61, 0x51, 0x49, 0x46,// 2
0x00, 0x21, 0x41, 0x45, 0x4B, 0x31,// 3
0x00, 0x18, 0x14, 0x12, 0x7F, 0x10,// 4
0x00, 0x27, 0x45, 0x45, 0x45, 0x39,// 5
0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30,// 6
0x00, 0x01, 0x71, 0x09, 0x05, 0x03,// 7
0x00, 0x36, 0x49, 0x49, 0x49, 0x36,// 8
0x00, 0x06, 0x49, 0x49, 0x29, 0x1E,// 9
0x00, 0x00, 0x36, 0x36, 0x00, 0x00,// :
0x00, 0x00, 0x56, 0x36, 0x00, 0x00,// ;
0x00, 0x08, 0x14, 0x22, 0x41, 0x00,// <
0x00, 0x14, 0x14, 0x14, 0x14, 0x14,// =
0x00, 0x00, 0x41, 0x22, 0x14, 0x08,// >
0x00, 0x02, 0x01, 0x51, 0x09, 0x06,// ?
0x00, 0x32, 0x49, 0x59, 0x51, 0x3E,// @
0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C,// A
0x00, 0x7F, 0x49, 0x49, 0x49, 0x36,// B
0x00, 0x3E, 0x41, 0x41, 0x41, 0x22,// C
0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C,// D
0x00, 0x7F, 0x49, 0x49, 0x49, 0x41,// E
0x00, 0x7F, 0x09, 0x09, 0x09, 0x01,// F
0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A,// G
0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F,// H
0x00, 0x00, 0x41, 0x7F, 0x41, 0x00,// I
0x00, 0x20, 0x40, 0x41, 0x3F, 0x01,// J
0x00, 0x7F, 0x08, 0x14, 0x22, 0x41,// K
0x00, 0x7F, 0x40, 0x40, 0x40, 0x40,// L
0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F,// M
0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F,// N
0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E,// O
0x00, 0x7F, 0x09, 0x09, 0x09, 0x06,// P
0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E,// Q
0x00, 0x7F, 0x09, 0x19, 0x29, 0x46,// R
0x00, 0x46, 0x49, 0x49, 0x49, 0x31,// S
0x00, 0x01, 0x01, 0x7F, 0x01, 0x01,// T
0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F,// U
0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F,// V
0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F,// W
0x00, 0x63, 0x14, 0x08, 0x14, 0x63,// X
0x00, 0x07, 0x08, 0x70, 0x08, 0x07,// Y
0x00, 0x61, 0x51, 0x49, 0x45, 0x43,// Z
0x00, 0x00, 0x7F, 0x41, 0x41, 0x00,// [
0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55,// 55
0x00, 0x00, 0x41, 0x41, 0x7F, 0x00,// ]
0x00, 0x04, 0x02, 0x01, 0x02, 0x04,// ^
0x00, 0x40, 0x40, 0x40, 0x40, 0x40,// _
0x00, 0x00, 0x01, 0x02, 0x04, 0x00,// '
0x00, 0x20, 0x54, 0x54, 0x54, 0x78,// a
0x00, 0x7F, 0x48, 0x44, 0x44, 0x38,// b
0x00, 0x38, 0x44, 0x44, 0x44, 0x20,// c
0x00, 0x38, 0x44, 0x44, 0x48, 0x7F,// d
0x00, 0x38, 0x54, 0x54, 0x54, 0x18,// e
0x00, 0x08, 0x7E, 0x09, 0x01, 0x02,// f
0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C,// g
0x00, 0x7F, 0x08, 0x04, 0x04, 0x78,// h
0x00, 0x00, 0x44, 0x7D, 0x40, 0x00,// i
0x00, 0x40, 0x80, 0x84, 0x7D, 0x00,// j
0x00, 0x7F, 0x10, 0x28, 0x44, 0x00,// k
0x00, 0x00, 0x41, 0x7F, 0x40, 0x00,// l
0x00, 0x7C, 0x04, 0x18, 0x04, 0x78,// m
0x00, 0x7C, 0x08, 0x04, 0x04, 0x78,// n
0x00, 0x38, 0x44, 0x44, 0x44, 0x38,// o
0x00, 0xFC, 0x24, 0x24, 0x24, 0x18,// p
0x00, 0x18, 0x24, 0x24, 0x18, 0xFC,// q
0x00, 0x7C, 0x08, 0x04, 0x04, 0x08,// r
0x00, 0x48, 0x54, 0x54, 0x54, 0x20,// s
0x00, 0x04, 0x3F, 0x44, 0x40, 0x20,// t
0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C,// u
0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C,// v
0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C,// w
0x00, 0x44, 0x28, 0x10, 0x28, 0x44,// x
0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C,// y
0x00, 0x44, 0x64, 0x54, 0x4C, 0x44,// z
0x14, 0x14, 0x14, 0x14, 0x14, 0x14,// horiz lines
};

/* 8*16 matrix */
const uint8_t C8X16[] =
{
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,// 0
  0x00,0x00,0x00,0xF8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x33,0x30,0x00,0x00,0x00,//! 1
  0x00,0x10,0x0C,0x06,0x10,0x0C,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//" 2
  0x40,0xC0,0x78,0x40,0xC0,0x78,0x40,0x00,0x04,0x3F,0x04,0x04,0x3F,0x04,0x04,0x00,//# 3
  0x00,0x70,0x88,0xFC,0x08,0x30,0x00,0x00,0x00,0x18,0x20,0xFF,0x21,0x1E,0x00,0x00,//$ 4
  0xF0,0x08,0xF0,0x00,0xE0,0x18,0x00,0x00,0x00,0x21,0x1C,0x03,0x1E,0x21,0x1E,0x00,//% 5
  0x00,0xF0,0x08,0x88,0x70,0x00,0x00,0x00,0x1E,0x21,0x23,0x24,0x19,0x27,0x21,0x10,//& 6
  0x10,0x16,0x0E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//' 7
  0x00,0x00,0x00,0xE0,0x18,0x04,0x02,0x00,0x00,0x00,0x00,0x07,0x18,0x20,0x40,0x00,//( 8
  0x00,0x02,0x04,0x18,0xE0,0x00,0x00,0x00,0x00,0x40,0x20,0x18,0x07,0x00,0x00,0x00,//) 9
  0x40,0x40,0x80,0xF0,0x80,0x40,0x40,0x00,0x02,0x02,0x01,0x0F,0x01,0x02,0x02,0x00,//* 10
  0x00,0x00,0x00,0xF0,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x1F,0x01,0x01,0x01,0x00,//+ 11
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xB0,0x70,0x00,0x00,0x00,0x00,0x00,//, 12
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,//- 13
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,0x00,0x00,//. 14
  0x00,0x00,0x00,0x00,0x80,0x60,0x18,0x04,0x00,0x60,0x18,0x06,0x01,0x00,0x00,0x00,/// 15
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x0F,0x10,0x20,0x20,0x10,0x0F,0x00,//0 16
  0x00,0x10,0x10,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//1 17
  0x00,0x70,0x08,0x08,0x08,0x88,0x70,0x00,0x00,0x30,0x28,0x24,0x22,0x21,0x30,0x00,//2 18
  0x00,0x30,0x08,0x88,0x88,0x48,0x30,0x00,0x00,0x18,0x20,0x20,0x20,0x11,0x0E,0x00,//3 19
  0x00,0x00,0xC0,0x20,0x10,0xF8,0x00,0x00,0x00,0x07,0x04,0x24,0x24,0x3F,0x24,0x00,//4 20
  0x00,0xF8,0x08,0x88,0x88,0x08,0x08,0x00,0x00,0x19,0x21,0x20,0x20,0x11,0x0E,0x00,//5 21
  0x00,0xE0,0x10,0x88,0x88,0x18,0x00,0x00,0x00,0x0F,0x11,0x20,0x20,0x11,0x0E,0x00,//6 22
  0x00,0x38,0x08,0x08,0xC8,0x38,0x08,0x00,0x00,0x00,0x00,0x3F,0x00,0x00,0x00,0x00,//7 23
  0x00,0x70,0x88,0x08,0x08,0x88,0x70,0x00,0x00,0x1C,0x22,0x21,0x21,0x22,0x1C,0x00,//8 24
  0x00,0xE0,0x10,0x08,0x08,0x10,0xE0,0x00,0x00,0x00,0x31,0x22,0x22,0x11,0x0F,0x00,//9 25
  0x00,0x00,0x00,0xC0,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x30,0x30,0x00,0x00,0x00,//: 26
  0x00,0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x60,0x00,0x00,0x00,0x00,//; 27
  0x00,0x00,0x80,0x40,0x20,0x10,0x08,0x00,0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x00,//< 28
  0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x00,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x00,//= 29
  0x00,0x08,0x10,0x20,0x40,0x80,0x00,0x00,0x00,0x20,0x10,0x08,0x04,0x02,0x01,0x00,//> 30
  0x00,0x70,0x48,0x08,0x08,0x08,0xF0,0x00,0x00,0x00,0x00,0x30,0x36,0x01,0x00,0x00,//? 31
  0xC0,0x30,0xC8,0x28,0xE8,0x10,0xE0,0x00,0x07,0x18,0x27,0x24,0x23,0x14,0x0B,0x00,//@ 32
  0x00,0x00,0xC0,0x38,0xE0,0x00,0x00,0x00,0x20,0x3C,0x23,0x02,0x02,0x27,0x38,0x20,//A 33
  0x08,0xF8,0x88,0x88,0x88,0x70,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x11,0x0E,0x00,//B 34
  0xC0,0x30,0x08,0x08,0x08,0x08,0x38,0x00,0x07,0x18,0x20,0x20,0x20,0x10,0x08,0x00,//C 35
  0x08,0xF8,0x08,0x08,0x08,0x10,0xE0,0x00,0x20,0x3F,0x20,0x20,0x20,0x10,0x0F,0x00,//D 36
  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x20,0x23,0x20,0x18,0x00,//E 37
  0x08,0xF8,0x88,0x88,0xE8,0x08,0x10,0x00,0x20,0x3F,0x20,0x00,0x03,0x00,0x00,0x00,//F 38
  0xC0,0x30,0x08,0x08,0x08,0x38,0x00,0x00,0x07,0x18,0x20,0x20,0x22,0x1E,0x02,0x00,//G 39
  0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x20,0x3F,0x21,0x01,0x01,0x21,0x3F,0x20,//H 40
  0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//I 41
  0x00,0x00,0x08,0x08,0xF8,0x08,0x08,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,0x00,//J 42
  0x08,0xF8,0x88,0xC0,0x28,0x18,0x08,0x00,0x20,0x3F,0x20,0x01,0x26,0x38,0x20,0x00,//K 43
  0x08,0xF8,0x08,0x00,0x00,0x00,0x00,0x00,0x20,0x3F,0x20,0x20,0x20,0x20,0x30,0x00,//L 44
  0x08,0xF8,0xF8,0x00,0xF8,0xF8,0x08,0x00,0x20,0x3F,0x00,0x3F,0x00,0x3F,0x20,0x00,//M 45
  0x08,0xF8,0x30,0xC0,0x00,0x08,0xF8,0x08,0x20,0x3F,0x20,0x00,0x07,0x18,0x3F,0x00,//N 46
  0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x10,0x20,0x20,0x20,0x10,0x0F,0x00,//O 47
  0x08,0xF8,0x08,0x08,0x08,0x08,0xF0,0x00,0x20,0x3F,0x21,0x01,0x01,0x01,0x00,0x00,//P 48
  0xE0,0x10,0x08,0x08,0x08,0x10,0xE0,0x00,0x0F,0x18,0x24,0x24,0x38,0x50,0x4F,0x00,//Q 49
  0x08,0xF8,0x88,0x88,0x88,0x88,0x70,0x00,0x20,0x3F,0x20,0x00,0x03,0x0C,0x30,0x20,//R 50
  0x00,0x70,0x88,0x08,0x08,0x08,0x38,0x00,0x00,0x38,0x20,0x21,0x21,0x22,0x1C,0x00,//S 51
  0x18,0x08,0x08,0xF8,0x08,0x08,0x18,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//T 52
  0x08,0xF8,0x08,0x00,0x00,0x08,0xF8,0x08,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//U 53
  0x08,0x78,0x88,0x00,0x00,0xC8,0x38,0x08,0x00,0x00,0x07,0x38,0x0E,0x01,0x00,0x00,//V 54
  0xF8,0x08,0x00,0xF8,0x00,0x08,0xF8,0x00,0x03,0x3C,0x07,0x00,0x07,0x3C,0x03,0x00,//W 55
  0x08,0x18,0x68,0x80,0x80,0x68,0x18,0x08,0x20,0x30,0x2C,0x03,0x03,0x2C,0x30,0x20,//X 56
  0x08,0x38,0xC8,0x00,0xC8,0x38,0x08,0x00,0x00,0x00,0x20,0x3F,0x20,0x00,0x00,0x00,//Y 57
  0x10,0x08,0x08,0x08,0xC8,0x38,0x08,0x00,0x20,0x38,0x26,0x21,0x20,0x20,0x18,0x00,//Z 58
  0x00,0x00,0x00,0xFE,0x02,0x02,0x02,0x00,0x00,0x00,0x00,0x7F,0x40,0x40,0x40,0x00,//[ 59
  0x00,0x0C,0x30,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x06,0x38,0xC0,0x00,//\ 60
  0x00,0x02,0x02,0x02,0xFE,0x00,0x00,0x00,0x00,0x40,0x40,0x40,0x7F,0x00,0x00,0x00,//] 61
  0x00,0x00,0x04,0x02,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//^ 62
  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,//_ 63
  0x00,0x02,0x02,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//` 64
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x19,0x24,0x22,0x22,0x22,0x3F,0x20,//a 65
  0x08,0xF8,0x00,0x80,0x80,0x00,0x00,0x00,0x00,0x3F,0x11,0x20,0x20,0x11,0x0E,0x00,//b 66
  0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00,0x00,0x0E,0x11,0x20,0x20,0x20,0x11,0x00,//c 67
  0x00,0x00,0x00,0x80,0x80,0x88,0xF8,0x00,0x00,0x0E,0x11,0x20,0x20,0x10,0x3F,0x20,//d 68
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x22,0x22,0x22,0x22,0x13,0x00,//e 69
  0x00,0x80,0x80,0xF0,0x88,0x88,0x88,0x18,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//f 70
  0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x6B,0x94,0x94,0x94,0x93,0x60,0x00,//g 71
  0x08,0xF8,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//h 72
  0x00,0x80,0x98,0x98,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//i 73
  0x00,0x00,0x00,0x80,0x98,0x98,0x00,0x00,0x00,0xC0,0x80,0x80,0x80,0x7F,0x00,0x00,//j 74
  0x08,0xF8,0x00,0x00,0x80,0x80,0x80,0x00,0x20,0x3F,0x24,0x02,0x2D,0x30,0x20,0x00,//k 75
  0x00,0x08,0x08,0xF8,0x00,0x00,0x00,0x00,0x00,0x20,0x20,0x3F,0x20,0x20,0x00,0x00,//l 76
  0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x20,0x3F,0x20,0x00,0x3F,0x20,0x00,0x3F,//m 77
  0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x3F,0x21,0x00,0x00,0x20,0x3F,0x20,//n 78
  0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x00,0x1F,0x20,0x20,0x20,0x20,0x1F,0x00,//o 79
  0x80,0x80,0x00,0x80,0x80,0x00,0x00,0x00,0x80,0xFF,0xA1,0x20,0x20,0x11,0x0E,0x00,//p 80
  0x00,0x00,0x00,0x80,0x80,0x80,0x80,0x00,0x00,0x0E,0x11,0x20,0x20,0xA0,0xFF,0x80,//q 81
  0x80,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x20,0x20,0x3F,0x21,0x20,0x00,0x01,0x00,//r 82
  0x00,0x00,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x33,0x24,0x24,0x24,0x24,0x19,0x00,//s 83
  0x00,0x80,0x80,0xE0,0x80,0x80,0x00,0x00,0x00,0x00,0x00,0x1F,0x20,0x20,0x00,0x00,//t 84
  0x80,0x80,0x00,0x00,0x00,0x80,0x80,0x00,0x00,0x1F,0x20,0x20,0x20,0x10,0x3F,0x20,//u 85
  0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x00,0x01,0x0E,0x30,0x08,0x06,0x01,0x00,//v 86
  0x80,0x80,0x00,0x80,0x00,0x80,0x80,0x80,0x0F,0x30,0x0C,0x03,0x0C,0x30,0x0F,0x00,//w 87
  0x00,0x80,0x80,0x00,0x80,0x80,0x80,0x00,0x00,0x20,0x31,0x2E,0x0E,0x31,0x20,0x00,//x 88
  0x80,0x80,0x80,0x00,0x00,0x80,0x80,0x80,0x80,0x81,0x8E,0x70,0x18,0x06,0x01,0x00,//y 89
  0x00,0x80,0x80,0x80,0x80,0x80,0x80,0x00,0x00,0x21,0x30,0x2C,0x22,0x21,0x30,0x00,//z 90
  0x00,0x00,0x00,0x00,0x80,0x7C,0x02,0x02,0x00,0x00,0x00,0x00,0x00,0x3F,0x40,0x40,//{ 91
  0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0x00,0x00,0x00,//| 92
  0x00,0x02,0x02,0x7C,0x80,0x00,0x00,0x00,0x00,0x40,0x40,0x3F,0x00,0x00,0x00,0x00,//} 93
  0x00,0x06,0x01,0x01,0x02,0x02,0x04,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//~ 94
};

const unsigned char gImage_juwo[] = { /* 0X01,0X01,0X80,0X00,0X20,0X00, */
0x00,0x00,0xC0,0xE0,0xF0,0xF8,0xFC,0xFC,0xFE,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,0x07,0x07,
0x03,0x81,0xC0,0xE0,0xF0,0xF0,0xF8,0xFC,0xFC,0xFC,0xF8,0xF0,0xE0,0xC0,0x00,0x00,
0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x07,0x03,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x81,0xC0,0xE0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFF,
0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x3F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,0xC0,0xE0,
0xF0,0xF0,0xF8,0xFC,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,0x0F,
0x07,0x03,0x81,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x80,0xC0,0xE0,0xF0,0xF0,0xE0,0xC0,0x80,0x02,0x07,0x07,0x0F,0x1F,
0x3F,0x7F,0x3F,0x1F,0x0F,0x0F,0x07,0x03,0x81,0xC0,0xE0,0xF0,0xF0,0xF8,0xFC,0xFE,
0xFE,0xFF,0xFF,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x80,0xC0,0xE0,0xE0,0xF0,0xF8,0xFC,
0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,0xFE,0xFC,0xF8,
0xF0,0xE0,0xF0,0xF8,0xFC,0xFE,0xFE,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,
0x0F,0x07,0x03,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x3F,0x1F,
0x0F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x01,0x03,0x07,0x0F,0x0F,0x1F,0x3F,
0x7F,0xFF,0x7F,0x3F,0x1F,0x0F,0x0F,0x07,0x03,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0x0F,0xFF,0xFF,0x7F,0x3F,0x1F,0x0F,0x0F,0x07,0x03,0x81,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,
0x80,0x80,0x80,0x80,0x80,0xC0,0xE0,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x3F,
0x00,0x00,0x00,0x00,0x00,0x18,0x3C,0x3E,0x7E,0x7F,0x7F,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0x7F,0x7F,0x7F,0x3F,0x3F,0x1F,0x0F,0x07,0x03,0x00,0x00,

};

/* logo matrix */
const unsigned char gImage_gd_logo[688] = {

0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X80,0XC0,0XE0,0XF0,0XF0,0XF8,0XF8,0XFC,
0XFC,0XFE,0XFE,0XFE,0XFC,0XF8,0XFA,0XF2,0XF6,0XCE,0X9E,0X7E,0XFC,0XFC,0XFC,0XF8,
0XF8,0XF0,0XF0,0XE0,0XC0,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0XE0,0XF8,0XFC,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0X7F,0X80,0XE1,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0X3F,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0X7F,0X7F,0XBF,0XBF,0XDF,0XDF,0XCF,0X01,0X0C,0X0F,0X0F,0X07,0X07,0X07,
0X07,0X03,0X03,0X01,0X00,0XC0,0XF0,0XF0,0XF0,0XF0,0XE0,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X01,0X0F,0X7F,0XFF,0XFF,0XFF,0XFF,0X7F,0X1F,0XCF,0XE7,0XF3,0XF9,
0XFC,0XFE,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFC,0XF8,0XF0,0XE0,0XC0,0XC0,
0X40,0X00,0X80,0XC0,0XDC,0XDF,0XDF,0XEF,0XE7,0X33,0X09,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X03,0X07,0X01,0X0C,0X1F,0X1F,0X3F,0X3F,0XBF,
0XBF,0XBF,0XBF,0XBF,0XBF,0XBF,0XBF,0XBF,0X9F,0XDF,0XCF,0XEF,0XE7,0XF3,0XFB,0XFD,
0X7E,0X7F,0X3F,0X1F,0X1F,0X0F,0X07,0X03,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X01,0X01,0X01,0X01,0X03,0X03,0X03,0X03,0X01,0X01,0X01,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,

0X00,0X00,0X00,0X00,0X00,0X00,
0XFC,0XFE,0X07,0X03,0X03,0X03,0XC3,0XC3,0X83,0X00,0XFB,0XFB,0XF3,0X00,0XF0,0XF8,
0X18,0X18,0X18,0XF8,0XF8,0XF8,0X00,0XF0,0XF8,0X18,0X18,0X18,0XF8,0XF8,0XF8,0X00,
0XFF,0XFF,0XFF,0X03,0X03,0X03,0X07,0XFE,0XFC,0X00,0XE0,0XF0,0XF8,0X98,0X98,0X98,
0XF8,0XF0,0X00,0X18,0XF8,0XF0,0X00,0X00,0XC0,0XF8,0XF8,0X08,0X00,0XFB,0XFB,0X00,
0X00,0XF0,0XF8,0X18,0X18,0X18,0X18,0X00,0XF0,0XF8,0XD8,0X98,0X98,0XF8,0XF0,0XE0,

0X00,0X00,0X00,0X00,0X00,0X00,
0X03,0X0F,0X0E,0X0C,0X0C,0X0C,0X0F,0X0F,0X0F,0X00,0X0F,0X0F,0X0F,0X00,0X07,0XCF,
0XCC,0XCC,0XCC,0XFF,0X7F,0X3F,0X00,0X07,0X0F,0X0C,0X0C,0X0C,0X0F,0X0F,0X0F,0X00,
0X0F,0X0F,0X0F,0X0C,0X0C,0X0C,0X0E,0X0F,0X07,0X00,0X03,0X0F,0X0F,0X0D,0X0D,0X0D,
0X0D,0X0D,0X00,0X00,0X01,0X0F,0X0F,0X0C,0X0F,0X07,0X00,0X00,0X00,0X0F,0X0F,0X00,
0X00,0X07,0X0F,0X0C,0X0C,0X0C,0X0C,0X00,0X07,0X0F,0X0D,0X0D,0X0D,0X0D,0X0D,0X01,
};

const unsigned char gImage_juwo2[] = { 
0x00,0x00,0x00,0xC0,0xF0,0xF8,0xFC,0xFC,0xFC,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,
0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0x7C,0xBC,0xDC,0xEC,0xF4,0xF0,0xF8,0xFC,0xF8,0xF0,
0xE0,0x00,0x00,0x00,0x00,0x70,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x70,
0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0xF0,0x00,0x00,0x00,0x30,0x70,0xF0,0xF0,
0xE0,0x80,0x70,0x70,0x70,0x70,0x70,0xF0,0xF0,0xF0,0xF0,0x70,0x78,0x78,0x78,0x18,
0x00,0x00,0x00,0x70,0x70,0xF0,0xF0,0xF0,0xF0,0x78,0x78,0x78,0xE0,0xE0,0xE0,0xC0,
0xC0,0xF8,0xF8,0xF8,0xF8,0x00,0x00,0x00,0x00,0xC0,0xC0,0xF8,0xF8,0xF8,0xF8,0xC0,
0xC0,0xE0,0xE0,0xE0,0xE0,0xF8,0xF8,0xF8,0xF8,0xE0,0xE0,0xE0,0xE0,0x60,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0x00,0x00,0x00,0x00,0x00,0x80,0x80,0x60,
0x70,0xF0,0xF8,0xFC,0xFE,0x7F,0xBF,0x9F,0xDF,0xEF,0xF7,0x03,0xFF,0xFF,0xFF,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x1C,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFC,
0xF9,0xFD,0xFF,0xFF,0xEF,0xFF,0xFF,0xFD,0x98,0x10,0x00,0x00,0x03,0x0F,0xFF,0xFF,
0xFD,0xF9,0x38,0x38,0xB8,0xF8,0xF8,0xFF,0xFF,0xFF,0xFF,0xF8,0xF8,0xB8,0x38,0x1C,
0x00,0x00,0x07,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x9C,0x9C,0x9D,0xBD,
0xB9,0xFF,0xFF,0xFF,0xFF,0xC0,0xC0,0x00,0x00,0xC1,0xE1,0xFF,0xFF,0xFF,0xFF,0x71,
0x71,0x3E,0x3E,0x7E,0xFE,0xFF,0xEF,0xEF,0xEF,0xFE,0x7E,0x3E,0x3E,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xF8,0xFC,0xFE,0x7E,0x3F,0x3F,0x3F,0x3F,
0x7E,0xFE,0xFD,0xFD,0xFE,0x7F,0x3F,0x1F,0x0F,0x0F,0x07,0x00,0xFF,0xFF,0xFF,0xFF,
0xFF,0x00,0x00,0x00,0x00,0x1F,0x1F,0x1F,0x1F,0x1F,0x1F,0x0F,0x0F,0x1F,0x1F,0x1F,
0x1F,0x07,0x07,0x0F,0x1F,0x1F,0x1F,0x1B,0x1B,0x00,0x00,0x00,0x1C,0x1F,0x1F,0x1F,
0x07,0x19,0x1E,0x1F,0x1F,0x0F,0x07,0x01,0x00,0x01,0x03,0x07,0x1F,0x1F,0x1E,0x1C,
0x18,0x00,0x1E,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x9F,0x1F,0x83,0x83,0x83,0x83,
0x83,0x9F,0x1F,0x1F,0x1F,0x81,0x81,0x80,0x80,0x81,0x99,0x9F,0x1F,0x1F,0x8F,0x80,
0x18,0x18,0x9C,0x9E,0x1F,0x0F,0x87,0x87,0x8F,0x9F,0x9E,0x9C,0x98,0x98,0x00,0x00,
0x00,0x00,0x00,0x1F,0x1F,0x6F,0xF7,0xF7,0xFB,0xF9,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,
0xF8,0xF8,0xF9,0xF9,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xF8,0xFF,0xFF,0x7F,0x3F,
0x1F,0x00,0x00,0x00,0x3E,0x7F,0x7F,0x7F,0x7F,0x7F,0x00,0x7F,0x7F,0x6B,0x73,0x7F,
0x3E,0x00,0x6B,0x6F,0x7F,0x7F,0x3E,0x60,0x73,0x7B,0x7F,0x6F,0x00,0x7F,0x7F,0x7F,
0x3F,0x3F,0x7F,0x7F,0x7F,0x00,0x3E,0x7F,0x63,0x63,0x63,0x00,0x3F,0x7F,0x7F,0x60,
0x7F,0x3F,0x0C,0xED,0x7F,0x3F,0x0D,0x7F,0x7F,0x0D,0x0D,0x60,0x73,0x7F,0x7F,0x7F,
0x7F,0x7F,0xEF,0x63,0x1E,0x5F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x06,0x1B,0x7F,0x7F,
0x7F,0x7E,0x7F,0x7F,0x66,0x60,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x7F,0x71,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x01,
0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x01,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

};

/* 静态函数声明 */
static void bsp_i2c_config(void);
static void bsp_oled_write_byte(uint8_t dat, oled_cd_selection type);
static void bsp_oled_set_pos(uint8_t x, uint8_t y);
static uint32_t bsp_oled_pow(uint8_t m,uint8_t n);

/*!
* 说明     BSP OLED初始化
* 输入     无
* 返回值   无
*/
void bsp_oled_init(void)
{
    bsp_i2c_config();                                   /* IIC接口初始化 */

    bsp_oled_write_byte(0xAE,OLED_CMD);                 /* 关闭oled 显示 */

    bsp_oled_write_byte(0x81,OLED_CMD);                 /* 设置对比度控制寄存器 */
    bsp_oled_write_byte(BRIGHTNESS,OLED_CMD);           /* 设置对比度, 0x00-0xff */

    bsp_oled_write_byte(0xA0,OLED_CMD);                 /* 设置seg/row映射，row地址127映射到seg0 */
    bsp_oled_write_byte(0xC0,OLED_CMD);                 /* 设置com/row扫描方向，从com[n-1]扫描到com0 */

    bsp_oled_write_byte(0xD5,OLED_CMD);                 /* 设置显示时钟分频比/振荡器频率 */
    bsp_oled_write_byte(0x80,OLED_CMD);                 /* 分频比为1，使用默认的内部时钟*/
    bsp_oled_write_byte(0xA8,OLED_CMD);                 /* 设置多路复用比率, 0x0f-0x3f */
    bsp_oled_write_byte(0x3F,OLED_CMD);                 /* 1/64 占空比 */

    bsp_oled_write_byte(0xD3,OLED_CMD);                 /* 通过com设置0d~63d的垂直偏移 */
    bsp_oled_write_byte(0x00,OLED_CMD);                 /* 不偏移 */

    bsp_oled_write_byte(0xD9,OLED_CMD);                 /* 设置预充电时间 */
    bsp_oled_write_byte(0xF1,OLED_CMD);                 /* 将预充电设置为15个时钟，将放电设置为1个时钟 */

    bsp_oled_write_byte(0xDA,OLED_CMD);                 /* 设置com引脚硬件配置 */
    bsp_oled_write_byte(0x12,OLED_CMD);                 /* 顺序com引脚配置和禁用com左/右重映射 */

    bsp_oled_write_byte(0xDB,OLED_CMD);                 /* 调整Vcom调节器输出 */
    bsp_oled_write_byte(0x30,OLED_CMD);                 /* 设置 Vcom 为 0.83Vcc */

    bsp_oled_write_byte(0x20,OLED_CMD);                 /* 设置存储器寻址模式， 0x00-0x02 */
    bsp_oled_write_byte(0x02,OLED_CMD);                 /* 页面寻址模式 */

    bsp_oled_write_byte(0x8D,OLED_CMD);                 /* 电荷泵设置 */
    bsp_oled_write_byte(0x14,OLED_CMD);                 /* 使能电荷泵*/

    bsp_oled_write_byte(0xA4,OLED_CMD);                 /* 禁用整个显示, 0xA4 or 0xA5 */

    bsp_oled_write_byte(0xA6,OLED_CMD);                 /* 设置正常显示，0为OFF显示，1为ON显示*/

    bsp_oled_write_byte(0xAF,OLED_CMD);                 /* 正常模式或睡眠模式, 0xAF or 0xAE */

    bsp_oled_clear(0);
}

/*!
* 说明     OLED显示图片
* 输入[1]  x:图片显示的起始x坐标
* 输入[2]  y:图片显示的起始y坐标
* 输入[3]  x_res:图片X轴分辨率
* 输入[4]  x_res:图片y轴分辨率
* 输入[5]  pbuff:图片数组地址
* 返回值   无
*/
void bsp_oled_logo(uint8_t x, uint8_t y, uint8_t x_res, uint8_t y_res, uint8_t *pbuff)
{
    uint8_t i,n;
	  uint8_t y_num;
	  uint16_t pixel;
	  pixel = x_res*y_res;
    if(y_res%8>0)
		{
			y_num = y_res/8 +1;
		}else{
	  y_num = y_res/8;
		}
	  
    /* 显示log */
    for(i=0;i<y_num;i++){
        /* 设置页面寻址模式的页面起始地址(B0h~B7h) */
        bsp_oled_write_byte (0xB0+i,OLED_CMD);
        /* 为页面寻址模式设置低四位列起始地址(00h~0Fh) */
        bsp_oled_write_byte (0x00,OLED_CMD);
        /* 为页面寻址模式设置高四位列起始地址(10h~1Fh) */
        bsp_oled_write_byte (0x10,OLED_CMD);
			  /* 设置坐标 */
        bsp_oled_set_pos(x,y+i);
        /* l传输图片数据 */
        for(n=0;n<x_res;n++){
					  if(i*x_res+n<pixel)
						{
            bsp_oled_write_byte(pbuff[i*x_res+n],OLED_DATA);
						}else{
							break;
						}
        }
    }
}

/*!
* 说明     清除OLED
* 输入[1]  start_page:起始行 0-7
* 返回值   无
*/
void bsp_oled_clear(uint8_t start_page)
{
    uint8_t i,n;
    /* 显示更新 */
    for(i=start_page;i<8;i++){
        bsp_oled_write_byte (0xB0+i,OLED_CMD);
        bsp_oled_write_byte (0x00,OLED_CMD);
        bsp_oled_write_byte (0x10,OLED_CMD);

        for(n=0;n<128;n++){
            bsp_oled_write_byte(0,OLED_DATA);
        }
    }
}

/*!
* 说明     显示字符
* 输入[1]  x:显示X坐标 0-127
* 输入[2]  y:显示y坐标 0-7
* 输入[3]  ch:显示字符
* 输入[4]  size:显示格式
* 返回值   无
*/
void bsp_oled_showchar(uint8_t x, uint8_t y, uint8_t ch, oled_font size)
{
    uint8_t c = 0, i = 0;

    c = ch - ' ';

    if(x > MAX_COLUMN-1){
        x = 0;
        y = y + 2;
    }

    if(FONT_8_16 == size){
        bsp_oled_set_pos(x,y);
        for(i=0;i<8;i++)
        bsp_oled_write_byte(C8X16[c*16+i],OLED_DATA);

        bsp_oled_set_pos(x,y+1);
        for(i=0;i<8;i++)
        bsp_oled_write_byte(C8X16[c*16+i+8],OLED_DATA);

    }else{
        bsp_oled_set_pos(x,y);
        for(i=0;i<6;i++)
        bsp_oled_write_byte(C6X8[c][i],OLED_DATA);
    }
}

/*!
* 说明     显示数字
* 输入[1]  x:显示X坐标 0-127
* 输入[2]  y:显示y坐标 0-7
* 输入[3]  num:显示数字
* 输入[4]  len:数字长度
* 输入[5]  size:格式类型
* 返回值   无
*/
void bsp_oled_shownum(uint8_t x, uint8_t y, uint16_t num, uint8_t len, oled_font size)
{
    uint8_t t, temp;
    uint8_t enshow = 0;
    uint8_t offset;

    if(FONT_8_16 != size){
        offset = 6;
    }else{
        offset = 8;
    }

    for(t=0;t<len;t++){
        temp = (num/bsp_oled_pow(10,len-t-1))%10;
        if((enshow==0)&&(t<(len-1))){
            if(temp==0){
                bsp_oled_showchar(x+offset*t,y,' ',size);
                continue;
            }else enshow = 1; 
        }
        bsp_oled_showchar(x+offset*t,y,temp+'0',size); 
    }
}

/*!
* 说明     显示字符串
* 输入[1]  x:显示X坐标 0-127
* 输入[2]  y:显示y坐标 0-7
* 输入[3]  ch:显字符串指针
* 输入[4]  size:格式类型
* 返回值   无
*/
void bsp_oled_showstring(uint8_t x, uint8_t y, uint8_t *ch, oled_font size)
{
    uint8_t j=0;

    while(ch[j]!='\0'){
        bsp_oled_showchar(x,y,ch[j],size);
        x += 8;
        if(x>120){
            x = 0;
            y += 2;
        }
            j++;
    }
}

/*!
* 说明     IIC配置
* 输入     无
* 返回值   无
*/
static void bsp_i2c_config(void)
{
	driver_i2c_init(&OLED_I2C);
}

/*!
* 说明     写数据到OLED模块
* 输入[1]  data:需要写入的数据
* 输入[2]  type:数据类型
* 返回值   无
*/
static void bsp_oled_write_byte(uint8_t data, oled_cd_selection type)
{
    uint8_t tx_buf[2];

    if(type){
        tx_buf[0] = 0x40;
    }else{
        tx_buf[0] = 0x00;
    }
		tx_buf[1]=data;
		
		driver_i2c_poll_write(&OLED_I2C,OLED_ADDR,tx_buf,2);
		
}

/*!
* 说明     将x-y坐标系转换为页面列坐标系
* 输入[1]  x:x坐标
* 输入[2]  y:y坐标
* 返回值   无
*/
static void bsp_oled_set_pos(uint8_t x, uint8_t y) 
{
    x=x+2;
    /* set page start address for page addressing mode */
    bsp_oled_write_byte(0xb0+y,OLED_CMD);
    /* set higher column start address */
    bsp_oled_write_byte(((x&0xf0)>>4)|0x10,OLED_CMD);
    /* set lower column start address */
    bsp_oled_write_byte((x&0x0f),OLED_CMD);
}

/*!
* 说明     幂计算
* 输入[1]  m:基数
* 输入[2]  n:索引号
* 返回值   计算结果
*/
static uint32_t bsp_oled_pow(uint8_t m,uint8_t n)
{
    uint32_t result = 1;

    while(n--){
        result*=m;
    }

    return result;
}
